package com.yunyao.dao.service.bamu.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yunyao.common.constant.enums.DataDeletedStatus;
import com.yunyao.common.web.util.StringUtils;
import com.yunyao.dao.mapper.BamuAuditConfirmHistoryMapper;
import com.yunyao.dao.model.BamuAuditConfirmHistory;
import com.yunyao.dao.service.bamu.IBamuAuditConfirmHistoryService;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * 审批确认历史记录表 服务实现类
 * </p>
 *
 * @author xingjishuai
 * @since 2024-07-02
 */
@Service
public class BamuAuditConfirmHistoryServiceImpl extends ServiceImpl<BamuAuditConfirmHistoryMapper, BamuAuditConfirmHistory> implements IBamuAuditConfirmHistoryService {

    /**
     * 插入记录到审核确认历史表
     * 该方法用于将相关业务信息插入到审核确认历史表中，以便于跟踪和记录业务流程中的审核确认步骤
     *
     * @param bizId 业务唯一标识，用于区分不同的业务记录
     * @param bizDate 业务日期，用于记录业务发生的时间点
     * @param bizPrice 业务价格，表示业务交易的金额或其他价格信息
     * @param file 关联的文件路径，用于存储与该业务相关的文件或文档
     * @param mark 标记信息，用于记录业务的附加信息或备注
     * @param status 业务状态，表示该业务当前的处理状态
     * @param type 业务类型，用于分类业务记录
     * @param realName 实际操作人的姓名，记录执行该业务操作的人员信息
     * @return 返回插入记录的ID，用于标识新增的记录
     */
    @Override
    public String insertRecord(String bizId, Date bizDate, BigDecimal bizPrice, String file,
                               String mark,
                               int status, String type, String realName) {
        // 创建一个新的审核确认历史对象
        BamuAuditConfirmHistory bamuAuditConfirmHistory = new BamuAuditConfirmHistory();
        // 设置业务唯一标识
        bamuAuditConfirmHistory.setBizId(bizId);
        // 设置业务日期
        bamuAuditConfirmHistory.setBizDate(bizDate);
        // 设置业务价格
        bamuAuditConfirmHistory.setBizPrice(bizPrice);
        // 设置关联文件路径
        bamuAuditConfirmHistory.setFile(file);
        // 设置标记信息
        bamuAuditConfirmHistory.setMark(mark);
        // 设置业务状态
        bamuAuditConfirmHistory.setStatus(status);
        // 设置业务类型
        bamuAuditConfirmHistory.setType(type);
        // 设置实际操作人的姓名
        bamuAuditConfirmHistory.setCnName(realName);

        bamuAuditConfirmHistory.setIsDeleted(DataDeletedStatus.NO.getType());
        // 使用基类映射器将对象插入数据库
        baseMapper.insert(bamuAuditConfirmHistory);
        // 返回新增记录的ID
        return bamuAuditConfirmHistory.getId();
    }

    @Override
    public String insertRecord2(String bizId, String file, int status, String cname, String mark) {
        // 创建一个新的审核确认历史对象
        BamuAuditConfirmHistory bamuAuditConfirmHistory = new BamuAuditConfirmHistory();
        bamuAuditConfirmHistory.setBizId(bizId);
        bamuAuditConfirmHistory.setFile(file);
        bamuAuditConfirmHistory.setStatus(status);
        bamuAuditConfirmHistory.setCnName(cname);
        bamuAuditConfirmHistory.setMark(mark);
        baseMapper.insert(bamuAuditConfirmHistory);
        // 返回新增记录的ID
        return bamuAuditConfirmHistory.getId();
    }

    @Override
    public List<BamuAuditConfirmHistory> getListByBizIdAndType(String bizId, String type, Boolean isAsc) {
        LambdaQueryWrapper<BamuAuditConfirmHistory> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(BamuAuditConfirmHistory::getBizId, bizId);
        queryWrapper.eq(StringUtils.isNotEmpty(type), BamuAuditConfirmHistory::getType, type);
        queryWrapper.eq(BamuAuditConfirmHistory::getIsDeleted, DataDeletedStatus.NO.getType());
        if (isAsc != null){
            if (isAsc) {
                queryWrapper.orderByAsc(BamuAuditConfirmHistory::getBizDate);
            }else {
                queryWrapper.orderByDesc(BamuAuditConfirmHistory::getBizDate);
            }
        }else {
            queryWrapper.orderByAsc(BamuAuditConfirmHistory::getBizDate);
        }
        return baseMapper.selectList(queryWrapper);
    }
}
